package cn.bellychang.decorator.demo01;

/**
 * 装饰模式是利用SetComponent来对对象进行包装的
 * 这样每个装饰对象的实现就和如何使用这个对象分离开了
 * 每个装饰对象只关心自己的功能，不需要关心如何被添加到对象链当中
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        // 首先用ConcreteComponent 实例化对象c
        ConcreteComponent c = new ConcreteComponent();
        // 然后用ConcreteDecoratorA 的实例化对象d1来包装c
        Component d1 = new ConcreteDecoratorA(c);
        // 再用ConcreteDecoratorB 的对象d2包装d1
        Component d2 = new ConcreteDecoratorB(d1);
        d2.methodA();
    }
}
